package pruebas;

import java.util.ArrayList;

import juego.Armado;
import juego.AvionCivil;
import juego.Avioneta;
import juego.Botin;
import juego.Cohete;
import juego.Colateral;
import juego.Coordenada;
import juego.Energia;
import juego.ExcepcionMismoElemento;
import juego.Helicoptero;
import juego.Impacto;
import juego.Laser;
import juego.Movil;
import juego.Proyectil;
import junit.framework.TestCase;

public class TestHelicoptero extends TestCase{
	
	public void testImpactoProvocado(){
		
		Colateral avion = new Helicoptero(0,8);
		Energia energia = new Energia(30);
		Impacto impacto = avion.impactoProvocado();
		impacto.herir(energia);
		assertEquals(20, energia.verEnergia());
		
	};
	
	public void testMovimiento(){
		
		ArrayList<Movil> listaDeMoviles = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
		int puntaje = 0;
		Colateral helicoptero = new Helicoptero(0,10);
		assertEquals (0, helicoptero.verUbicacion().obtenerCoordenadaX());
		assertEquals (10, helicoptero.verUbicacion().obtenerCoordenadaY());
		
		puntaje = helicoptero.vivir(listaDeMoviles,listaDeBotines);
		assertEquals (0,helicoptero.verUbicacion().obtenerCoordenadaX());
		assertEquals (10,helicoptero.verUbicacion().obtenerCoordenadaY());
		assertTrue(puntaje == 0);
		
		helicoptero.vivir(listaDeMoviles,listaDeBotines);
		assertEquals (-5, helicoptero.verUbicacion().obtenerCoordenadaX());
		assertEquals (-8, helicoptero.verUbicacion().obtenerCoordenadaY());
		assertTrue(puntaje == 0);           
		
	};

	public void testColisionEntreHelicopteros(){
		
		ArrayList<Movil> listaDeMoviles = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
		int puntaje = 0;
		Colateral helicoptero1 = new Helicoptero(0,10);
		Colateral helicoptero2 = new Helicoptero(10,0);
		Colateral helicoptero3 = new Helicoptero(0,-10);
		puntaje = helicoptero1.vivir(listaDeMoviles, listaDeBotines);
		assertEquals(0,helicoptero1.verUbicacion().obtenerCoordenadaX());
		assertEquals(10,helicoptero1.verUbicacion().obtenerCoordenadaY());
		assertTrue(puntaje==0);
		
		listaDeMoviles.add(helicoptero1);
		listaDeMoviles.add(helicoptero2);
		listaDeMoviles.add(helicoptero3);
		
		helicoptero1.vivir(listaDeMoviles,listaDeBotines);
		
		assertEquals(-5,helicoptero1.verUbicacion().obtenerCoordenadaX());
		assertEquals(-8,helicoptero1.verUbicacion().obtenerCoordenadaY());
		
		try{
		assertFalse(helicoptero1.huboContacto(helicoptero2));
		}
		catch (ExcepcionMismoElemento excepcion){
			assertTrue(true);
		}; 
		try{
			assertTrue(helicoptero1.huboContacto(helicoptero3));
		}
		catch (ExcepcionMismoElemento excepcion){
			assertTrue(true);
		};
		assertTrue(helicoptero1.estaVivo());
		assertTrue(helicoptero2.estaVivo());
	};
	
	public void testColisionContraAvioneta(){
		
		ArrayList<Movil> listaDeMoviles = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
		int puntaje = 0;
		Colateral helicoptero = new Helicoptero(0,10);
		Coordenada ubicacion = new Coordenada(-1,-8);
		Armado avioneta = new Avioneta(ubicacion);
		puntaje = helicoptero.vivir(listaDeMoviles, listaDeBotines);
		assertEquals(0,helicoptero.verUbicacion().obtenerCoordenadaX());
		assertEquals(10,helicoptero.verUbicacion().obtenerCoordenadaY());
		assertTrue(puntaje==0);
		
		assertEquals(0,listaDeMoviles.size());
		assertEquals(0,listaDeBotines.size());
		
		listaDeMoviles.add(helicoptero);
		listaDeMoviles.add(avioneta);
		
		//override en vertamanio de avioneta
		puntaje = helicoptero.vivir(listaDeMoviles, listaDeBotines);
		assertEquals(-5,helicoptero.verUbicacion().obtenerCoordenadaX());
		assertEquals(-8,helicoptero.verUbicacion().obtenerCoordenadaY());
		assertTrue(puntaje == 0);
		
		
		try{
			assertTrue(helicoptero.huboContacto(avioneta));
		}
		catch (ExcepcionMismoElemento excepcion){
			assertTrue(true);
		};
		
		assertTrue(helicoptero.estaVivo());
		assertTrue(avioneta.estaVivo());
	};
	
	public void testColisionConAvionCivil(){
		
		ArrayList<Movil> listaDeMoviles = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
        Colateral helicoptero = new Helicoptero(5,8);
        Colateral avionCivil = new AvionCivil(1,-8);
        assertEquals(5,helicoptero.verUbicacion().obtenerCoordenadaX());
        assertEquals(8,helicoptero.verUbicacion().obtenerCoordenadaY());
        assertEquals(1,avionCivil.verUbicacion().obtenerCoordenadaX());
        assertEquals(-8,avionCivil.verUbicacion().obtenerCoordenadaY());
        
        int puntaje = helicoptero.vivir(listaDeMoviles, listaDeBotines);
        assertEquals(0,puntaje);
        assertEquals(0,listaDeMoviles.size());
        assertEquals(0,listaDeBotines.size());
     
        listaDeMoviles.add(helicoptero);
        listaDeMoviles.add(avionCivil);
        puntaje = helicoptero.vivir(listaDeMoviles,listaDeBotines);
        
        try{
        	assertTrue(helicoptero.huboContacto(avionCivil));
        }
        catch (ExcepcionMismoElemento excepcion){
        	assertTrue(true);
        };
        
        assertEquals(0,puntaje);
        assertTrue(avionCivil.estaVivo());
        assertTrue(helicoptero.estaVivo());
       
        puntaje = helicoptero.vivir(listaDeMoviles, listaDeBotines);
        assertTrue(puntaje == 0);
        
        try{
        	assertFalse(helicoptero.huboContacto(avionCivil));
        }
        catch (ExcepcionMismoElemento excepcion){
        	assertTrue(true);
        };
        
	};
	
	public void testColisionContraProyectil(){
		
		ArrayList<Movil> listaDeMoviles = new ArrayList<Movil>();
		ArrayList<Botin> listaDeBotines = new ArrayList<Botin>();
		Colateral helicoptero = new Helicoptero(0,-5); 		
		Coordenada ubicacion = new Coordenada(2,1);
		Proyectil cohete = new Cohete(ubicacion);
		cohete.hacerLeal();
		Coordenada ubicacionLaser = new Coordenada(6,-3);
		Proyectil laser = new Laser(ubicacionLaser);
		laser.hacerLeal();
		
		assertTrue(helicoptero.verUbicacion().obtenerCoordenadaX() == 0);
		assertTrue(helicoptero.verUbicacion().obtenerCoordenadaY() == -5);
		
		int puntaje = helicoptero.vivir(listaDeMoviles,listaDeBotines);
		assertTrue(puntaje == 0);
		assertEquals(0,listaDeMoviles.size());
		assertEquals(0,listaDeBotines.size());
		
		listaDeMoviles.add(helicoptero);
		listaDeMoviles.add(cohete);
		listaDeMoviles.add(laser);
		
		assertEquals(0,listaDeBotines.size());
		assertEquals(3,listaDeMoviles.size());
		
		puntaje = helicoptero.vivir(listaDeMoviles,listaDeBotines);
		assertTrue(puntaje == 0);
		
		for (int i=1;i<=11;i++){
			puntaje = helicoptero.vivir(listaDeMoviles,listaDeBotines);
		};
		
		assertTrue(puntaje == -200);
		assertFalse(helicoptero.estaVivo());
		assertFalse(laser.estaVivo());
		assertTrue(cohete.estaVivo());
		
		
		
   
	};
	
}
